iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0

一邊把容器建立起來,一邊看有沒有什麼地方要修改的~

1.network

跟著Multi container apps,先把多個容器要連結的network建立起來。

docker network create cake-app

接著用docker network ls 就可以看到有個name叫做cake-app的network被建立起來了,預設的Driver是bridge,這邊可以用 -d的方式修改成overlay

If you want to create a network that spans multiple Docker hosts each running an Engine, you must create an overlay network.

overlay模式是用在多部實體主機的狀況下,之後有時間再來試試@@

2.MySQL

根據官方提供的command小改一下,mysql的tag成最新版的8.0

docker run -d --name cont1-mysql \
     --network cake-app --network-alias mysql \
     -v cake-mysql-data:/var/lib/mysql \
     -e MYSQL_ROOT_PASSWORD=secret \
     -e MYSQL_DATABASE=cake \
     mysql:8.0

Mysql - Official Image | Docker Hub

根據官方image說明,-v所創的資料夾對應到container內用來存放data的資料夾。另外這個container只會用來做資料庫,所以只使用root,設定他root的密碼

https://ithelp.ithome.com.tw/upload/images/20210917/20127692bEOPLogqHt.png

可以看到container被建立起來了~

https://ithelp.ithome.com.tw/upload/images/20210917/20127692M1VOBmOFEe.png

檢查了cake這個database確實存在。

3. nicolaka/netshoot

nicolaka/netshoot (https://github.com/nicolaka/netshoot)

為了要連接mysql容器裡的資料庫,需要用到這個管理網路功能的容器。

docker run -it \
 --name netToolsInCake --network cake-app nicolaka/netshoot

會看到這個畫面:

https://ithelp.ithome.com.tw/upload/images/20210917/20127692wgsUZ3z7FN.png

dig mysql

Inside the container, we’re going to use the dig command, which is a useful DNS tool. We’re going to look up the IP address for the hostname mysql.

所以這邊的mysql是指前面設定的--network-alias mysql,因此我們確實可以知道network裡面是有這個container的,而且可以利用network-alias來指定到這個ip,對container做操作。

4. phpMyadmin

大概會是比較複雜的部份,先看一下官方的run怎麼寫的…

docker run -dp 3000:3000 \
   -w /app -v "$(pwd):/app" \
   --network todo-app \
   -e MYSQL_HOST=mysql \
   -e MYSQL_USER=root \
   -e MYSQL_PASSWORD=secret \
   -e MYSQL_DB=todos \
   node:12-alpine \
   sh -c "yarn install && yarn run dev"

先試一個版本:-dp的部分應該會沿用,port改成8081:80。phpmyadmin的部分 -w跟-v應該用不到先省略好了。

docker run --name cont2-phpmyadmin --network cake-app -p 8081:80 phpmyadmin/phpmyadmin:latest

跑出來的結果是這樣

Status: Downloaded newer image for phpmyadmin/phpmyadmin:latest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message
[Fri Sep 17 14:31:34.695089 2021] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.4.20 configured -- resuming normal operations
[Fri Sep 17 14:31:34.695152 2021] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

使用docker建立apache2伺服器的時候,十之八九都有servername的問題,用httpd、phpmyadmin、cakephp都是……

echo "ServerName localhost" >> /etc/apache2/apache2.conf

通常我用localhost,之後這點要寫到dockerfile才行。

先進到http://localhost:8081/index.php 試著用root登入看看

https://ithelp.ithome.com.tw/upload/images/20210917/20127692O6OSSYFi0k.png

跑出了警告QQ

雖然這只是個陽春版,但還是要確認一下是不是有其他問題,因此明天再來整理看看為什麼不能set session cookie。


上一篇
[DAY1]前言
下一篇
[DAY3]建立容器(二)
系列文
Docker、docker-compose、network使用多個容器進行網頁開發13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言